package com.xxzuibang.day8.作用域;

/**
 * 1.属性和局部变量可以重名，访问的时候遵循就近原则
 * 2.在用一个作用域中，比如同一个方法中，两个局部变量不能重名
 * 3.属性生命周期较长，伴随着对象的创建而创建，伴随着对象的销毁而销毁
 * 4.作用域范围不同，全局变量可以被本类或者其他类使用（通过对象调用） 局部变量：只能在本类中对应的方法中使用
 * 5.全局变量可以加修饰符，局部变量不能加修饰符
 */
public class Scope02 {
    public static void main(String[] args) {
        /**
         * 属性生命周期较长，伴随着对象的创建而创建，伴随着对象的销毁而销毁
         * 局部变量生命周期较短
         */
        Person p=new Person();
        //当执行say方法时，say方法的局部变量比如name会创建，当say方法执行完毕时局部变量会销毁，全局变量仍可使用
        p.say();
        T t1=new T();
        t1.test();//第一种跨类访问对象属性的方式
        t1.test2(p);//第二种跨类访问对象属性的方式
    }
}

class T{
    //全局变量（属性）：可以被本类使用，或者其他类使用（通过对象调用）
    public void test(){
        Person person=new Person();
        System.out.println(person.name);
    }
    public void test2(Person p){
        System.out.println(p.name);
    }
}

class Person{
    //属性可以加修饰符，局部变量不能加修饰符
    public  int age=20;
    String name="同名";
    public  void say(){
        //属性和局部变量可以重名，访问的时候遵循就近原则
        String name="King";
        System.out.println("say()name="+name);
    }
    public void hi(){
        String address="北京";
        String name="sx";
    }
}